package com.jiang.专题.动态规划.Q2140;

/**
 * @author Jiang
 * @version 1.0
 * @date 2025/01/04 23:10
 */
class Solution {
    public long mostPoints(int[][] questions) {
        long res = 0;
        int len = questions.length;
        long[] dp = new long[len]; // dp[i] 表示从问题i开始到最后的最高分数
        for (int i = len - 1; i >= 0; i--) {
            if (i + questions[i][1] + 1 < len) { // 跳过题没超过数组长度，那么dp[i] = 当前分数 + 跳过后的第一个题目分数；否则dp[i] = 当前分数
                dp[i] = questions[i][0] + dp[i + questions[i][1] + 1];
            } else {
                dp[i] = questions[i][0];
            }
            // 如果res比dp[i]大，就要赋值dp[i], 保证dp[i]是从问题i开始到最后的最高分数；否则更改res
            if (res > dp[i]) {
                dp[i] = res;
            } else {
                res = dp[i];
            }
        }
        return res;
    }
}
